import axios from 'axios'
import { Message } from 'element-ui'
// 导入vuex
import store from '@/store'
import { getTokenTime } from '@/utils/auth.js'

import router from '@/router'

// 约定过期时间
const outTime = 360 * 60

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API
})

// request interceptor请求拦截器
service.interceptors.request.use(config => {
  // console.log(config)
  const token = store.getters.token
  if (token) {
    // 检查token是否过期
    if (isCheckoutTimeOut()) {
      // token过期了，先清空token
      store.commit('user/logout')
      // 跳转到登录页
      router.push('/login')
      // 返回一个错误信息
      return Promise.reject(new Error('登录过期'))
    }
    config.headers.Authorization = 'Bearer ' + token
  }
  return config
})

// response interceptor相应拦截器
service.interceptors.response.use(res => {
  // console.log(res)
  const { success, data, message } = res.data
  if (success) {
    return data
  }
  Message.error(message)
  return Promise.reject(new Error('系统出错,请重试'))
}, err => {
  // 相应错误
  // error 信息 里面 response的对象
  let text = null
  if (err.response && err.response.data && err.response.data.code === 10002) {
    // 当等于10002的时候 表示 后端告诉我token超时了
    store.commit('user/logout') // 登出action 删除token
    router.push('/login')
    text = '登录过期'
  } else {
    Message.err(err.message) // 提示错误信息
  }

  if (err.response && err.response.status === 404) {
    text = '亲，请求出错，请重试'
  }
  Message.error(text || err.message)
  // 默认什么都不做会进入.then
  // return Promise.reject（）直接进入catch
  return Promise.reject(new Error(text))
})

function isCheckoutTimeOut() {
  // 获取保存的时间戳
  const currentTime = getTokenTime()
  // 获取当前的时间戳
  const tokenTime = Date.now()
  // console.log(currentTime)
  // console.log(tokenTime)
  return ((tokenTime - currentTime) / 1000 > outTime)
}

export default service
